#define RCC_BASE 0x40023800 
#define ctll_reg (*(volatile uint32_t *)(RCC_BASE + 0x00U))
#define pll_reg (*(volatile uint32_t *)(RCC_BASE + 0x04U))
#define cfg0_reg (*(volatile uint32_t *)(RCC_BASE + 0x08U))

#include "gd32f4xx.h"
#include "systick.h"
#include "main.h"
#include "exit.h"
#include "Tim.h"
#include "usart.h"
#include "adc.h"
#include "string.h"
#include "OLED.h"

//external signatures
volatile uint8_t handle=0;


void while_loop(void);
void gpio_set(void);
void init(void);


int main(void)
{
    init(); // 初始化函数
    OLED_DrawLine(0, 0, 127, 63); // 在OLED上绘制一条线
    OLED_Update(); // 更新OLED显示
    while(1) {
        gpio_bit_toggle(GPIOC, GPIO_PIN_2); // 切换GPIOC PIN0状态
        while_loop(); // 调用循环函数
    }
}

void while_loop(void){
    delay_1ms(500); // 1s
    real_func(); // 调用实际处理函数
}



void gpio_set(void){
    rcu_periph_clock_enable(RCU_GPIOC); 
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0|GPIO_PIN_2);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_2);

    rcu_periph_clock_enable(RCU_GPIOA); 
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0|GPIO_PIN_4);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_4);         
    
    gpio_bit_set(GPIOC, GPIO_PIN_0); // GPIOC PIN0
    gpio_bit_set(GPIOA, GPIO_PIN_0); // GPIOC PIN2
    gpio_bit_reset(GPIOA, GPIO_PIN_4); // GPIOC PIN2
    gpio_bit_reset(GPIOC, GPIO_PIN_2); // GPIOC PIN2
}


void init(void){
    systick_config();
    usart_init(); // 初始化USART
    TIMER6_INIT(); // 初始化定时器6
    gpio_set(); // 设置GPIO初始状态
    exit6_init(); // 初始化外部中断6
    adc_init();
    OLED_Init(); // 初始化OLED显示
}

#ifdef GD_ECLIPSE_GCC
#endif /* GD_ECLIPSE_GCC */